export default class ListUtils {

    /**
     * 比较 list 中每个数据的字段，只要与第一行不同，生成差异标记
     * @param list 数据列表
     * @returns 返回差异标记数组
     */
    static generateDifferences(list: Array<any>): Array<{ rowIndex: number, diffKey: string }> {
        if (list.length === 0) return [];

        let firstRow = list[0];  // 获取第一行数据
        let keys = Object.keys(firstRow).filter(value => value !== 'id');  // 获取除了'id'以外的所有字段
        let differences: Array<{ rowIndex: number, diffKey: string }> = [];

        for (let i = 1; i < list.length; i++) {  // 从第二行开始与第一行做比较
            let currentRow = list[i];
            let diffKey: string | null = null;  // 存储差异标记
            // 遍历每个字段
            for (let key of keys) {
                if (firstRow[key] !== currentRow[key]) {
                    diffKey = `${key}`;  // 差异标记
                    differences.push({ rowIndex: i, diffKey });
                }
            }
        }

        return differences;
    }

    /**
     * 通过指定字段判断 list 中每个对象是否一致
     * @param list 数据列表
     * @param key 字段名
     * @returns 返回是否一致
     */
    static isFieldConsistent(list: Array<any>, key: string): boolean {
        if (list.length === 0) return true;

        const firstValue = list[0][key];
        return list.every(item => item[key] === firstValue);
    }

    /**
     * 根据某个字段获取唯一值列表
     * @param list 数据列表
     * @param key 字段名
     * @returns 返回该字段的唯一值列表
     */
    static getUniqueFieldValues(list: Array<any>, key: string): any[] {
        const values = list.map(item => item[key]);
        return [...new Set(values)];
    }
}
